package com.lee.boot.head.first.demo.config;

import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.interceptor.KeyGenerator;

import java.lang.reflect.Method;
import java.util.concurrent.ThreadLocalRandom;

/**
 * @Auther: Lee
 * @Date: 2018/6/28 15:19
 * @Description: 配置使用redis缓存
 */

/***
 * 说到底缓存就是临时存储的一个东西，
 * 可能redis适合作为这么一个临时存东西的数据库，所以才那么多人使用吧？
 * 在这个项目中只是写了将查询出的结果写入缓存，但是如果mysql中的数据修改的话，
 * 这里还是取得缓存中的数据 也就是修改的数据并没有查出来
 * 所以当数据库中的数据被修改后，需要将对应的缓存数据给删掉，
 * 先修改数据库，后删缓存，代价较小
 */
//@Configuration
//@EnableCaching
public class RedisConfiguration extends CachingConfigurerSupport {

//    使用redis缓存控制器作为缓存控制器
//    @Bean
//    public CacheManager getCacheManager(RedisTemplate redisTemplate){
//        return new RedisCacheManager(redisTemplate);
//    }

    /**
     * 定义缓存中的key-value中的key
     * @return
     */
    @Override
    public KeyGenerator keyGenerator() {
        return new KeyGenerator() {
            /**
             *
             * @param o   类对象
             * @param method  方法对象
             * @param objects  参数对象
             * @return
             */
            @Override
            public Object generate(Object o, Method method, Object... objects) {
                StringBuilder sb = new StringBuilder();
                for (Object object : objects) {
                    String a ="a";
                    int i = ThreadLocalRandom.current().nextInt(100);
                    sb.append(a+i);
                }
                return sb.toString();
            }
        };

    }
}
